home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / cdplay / src / coninit.c < prev    next >
Text File  |  1991-10-18  |  4KB  |  134 lines

  1. /** << High C & 386ASM >> *****************************************************
  2. **
  3. **    コンソール初期化プログラム( MS-DOS上でも有効! )
  4. **
  5. **    ☆ 画面のクリアをしていないので、必要ならば EGB_init() 等でクリアのこと.
  6. **
  7. **    < HISTORY >
  8. **    1991.03.06 : CREATE
  9. **
  10. **    Programmed by Y.Hirata ( Nifty ID : NAB03321 )
  11. **
  12. ******************************************************************************/
  13.  
  14. extern    inp( unsigned ) ;
  15. extern    outp( unsigned,unsigned ) ;
  16.  
  17. #define    CRTC_addr    0x0440                /*  CRTC : アドレス・レジスタ                */
  18. #define    CRTC_data    0x0442                /*  CRTC : データ下位                    */
  19. #define    VDC_addr    0x0448                /*  ビデオ出力制御 : アドレス・レジスタ        */
  20. #define    VDC_data    0x044a                /*  ビデオ出力制御 : 内部レジスタ・データ    */
  21. #define    VRC_addr    0x0458                /*  VRAMアクセス制御 : アドレス・レジスタ        */
  22. #define    VRC_data    0x045a                /*  VRAMアクセス制御 : 内部レジスタ・データ    */
  23.  
  24. static int CRTC[]= {
  25.                 0x0040,0x0320,0x0000,0x0000,0x035F,0x0000,0x0010,0x0000,
  26.                 0x036F,0x009C,0x031C,0x009C,0x031C,0x0040,0x0360,0x0040,
  27.                 0x0360,0x0000,0x009C,0x0000,0x0050,0x0000,0x009C,0x0000,
  28.                 0x0080,0x004A,0x0001,0x0000,0x001F,0x0003,0x0000,0x0150    } ;
  29. static char VDC[]= { 0x15,0x09 } ;
  30.  
  31. #define PALETTE_ADDR   0x0FD90
  32. #define PALETTE_B_DATA 0x0FD92
  33. #define PALETTE_R_DATA 0x0FD94
  34. #define PALETTE_G_DATA 0x0FD96
  35.  
  36. static unsigned char Palette[16][3]= {
  37.                             /*    B   R   G : 上位 4ビット    */
  38.                                   0,  0,  0,
  39.                                 176,  0,  0,
  40.                                   0,176,  0,
  41.                                 176,176,  0,
  42.                                   0,  0,176,
  43.                                 176,  0,176,
  44.                                   0,176,176,
  45.                                 176,176,176,
  46.                                  64, 64, 64,
  47.                                 255,  0,  0,
  48.                                   0,255,  0,
  49.                                 255,255,  0,
  50.                                   0,  0,255,
  51.                                 255,  0,255,
  52.                                   0,255,255,
  53.                                 255,255,255
  54.                          } ;
  55.  
  56. /**************************  FM音源のポートへの書き込み  ***********************/
  57. void FM_write( int addr,int data )
  58. {
  59.     int        c ;
  60.  
  61.     while ( inp( 0x04d8 ) & 0x80 ) ;
  62.     outp( 0x04d8, addr ) ;
  63.     for ( c=0; c<4; c+=1 ) ;
  64.     while ( inp( 0x04d8 ) & 0x80 ) ;
  65.     outp( 0x04da, data ) ;
  66. }
  67.  
  68. /********************************  コンソール設定  ********************************/
  69. void coninit()
  70. {
  71.     int        c ;
  72.  
  73. /*    マスク解除    */
  74.     outp( VRC_addr,0 ) ;
  75.     outp( VRC_data,0xff ) ;
  76.     outp( VRC_data+1,0xff ) ;
  77.     outp( VRC_addr,1 ) ;
  78.     outp( VRC_data,0xff ) ;
  79.     outp( VRC_data+1,0xff ) ;
  80.  
  81. /*    ビデオ出力制御 I/O 設定    */
  82.     outp( VDC_addr,0 ) ;
  83.     outp( VDC_data,VDC[0] ) ;
  84.     outp( VDC_addr,1 ) ;
  85.     outp( VDC_data,VDC[1] | 0x20 ) ;
  86.  
  87. /*    CRTC I/O 設定    */
  88.     outp( CRTC_addr,0x1c ) ;
  89.     outp( CRTC_data+1,0 ) ;
  90.     while ( inp( CRTC_data+1 ) & 0x80 ) ;
  91.  
  92.     for ( c=0; c<32; c++ ) {
  93.         outp( CRTC_addr,c ) ;
  94.         outp( CRTC_data  ,(CRTC[c] & 0xff) ) ;
  95.         outp( CRTC_data+1,(CRTC[c] >> 8) ) ;
  96.     }
  97.     outp( CRTC_addr,0x1c ) ;
  98.     outp( CRTC_data+1,((CRTC[0x1c] >> 8) | 0x80) ) ;
  99.  
  100.     outp( VDC_addr,1 ) ;
  101.     outp( VDC_data,VDC[1] & 0x0C ) ;
  102.  
  103. /*    パレット設定(1)    */
  104.     for ( c=0 ; c<16 ; c++ ) {
  105.         outp( PALETTE_ADDR,c ) ;
  106.         outp( PALETTE_B_DATA,Palette[c][0] ) ;
  107.         outp( PALETTE_R_DATA,Palette[c][1] ) ;
  108.         outp( PALETTE_G_DATA,Palette[c][2] ) ;
  109.     }
  110.     outp( VDC_addr,1 ) ;
  111.     outp( VDC_data,VDC[1] | 0x20 ) ;
  112.  
  113. /*    パレット設定(2)    */
  114.     for ( c=0 ; c<16 ; c++ ) {
  115.         outp( PALETTE_ADDR,c ) ;
  116.         outp( PALETTE_B_DATA,Palette[c][0] ) ;
  117.         outp( PALETTE_R_DATA,Palette[c][1] ) ;
  118.         outp( PALETTE_G_DATA,Palette[c][2] ) ;
  119.     }
  120.  
  121.     outp( VDC_addr,1 ) ;
  122.     outp( VDC_data,VDC[1] ) ;
  123.  
  124. /*    FM音源のタイマBを始動    */
  125.     FM_write( 0x21,0x00 ) ;
  126.     FM_write( 0x2c,0x80 ) ;
  127.     FM_write( 0x2b,0x00 ) ;
  128.     FM_write( 0x27,0x30 ) ;
  129.     FM_write( 0x26,0xdd ) ;
  130.     FM_write( 0x27,0x2a ) ;
  131.  
  132. }
  133.  
  134.